<?php

class UserSecurity {

    private $id;
    private $idColaborador;
    private $nomeColaborador;
    private $avatarColaborador;
    private $idTipoColaborador;
    private $idPerfil;
    private $autoridades;
    private $pageAllow;
    private $toolbarAllow;
    private $flagAllow;

    public function setId($id) {
        $this->id = SecurityEncryptionHelper::encrypt($id);
    }

    public function getId() {
        return SecurityEncryptionHelper::decrypt($this->id);
    }

    public function setIdColaborador($idColaborador) {
        $this->idColaborador = SecurityEncryptionHelper::encrypt($idColaborador);
    }

    public function getIdColaborador() {
        return SecurityEncryptionHelper::decrypt($this->idColaborador);
    }

    public function setNomeColaborador($nomeColaborador) {
        $this->nomeColaborador = SecurityEncryptionHelper::encrypt($nomeColaborador);
    }

    public function getNomeColaborador() {
        return SecurityEncryptionHelper::decrypt($this->nomeColaborador);
    }

    public function setAvatarColaborador($avatarColaborador) {
        $this->avatarColaborador = SecurityEncryptionHelper::encrypt($avatarColaborador);
    }

    public function getAvatarColaborador() {
        return SecurityEncryptionHelper::decrypt($this->avatarColaborador);
    }

    public function setIdTipoColaborador($idTipoColaborador) {
        $this->idTipoColaborador = SecurityEncryptionHelper::encrypt($idTipoColaborador);
    }

    public function getIdTipoColaborador() {
        return SecurityEncryptionHelper::decrypt($this->idTipoColaborador);
    }

    public function setIdPerfil($idPerfil) {
        $this->idPerfil = SecurityEncryptionHelper::encrypt($idPerfil);
    }

    public function getIdPerfil() {
        return SecurityEncryptionHelper::decrypt($this->idPerfil);
    }

    public function getAutoridades() {
        if (isset($this->autoridades[0])) {
            $autoridades = array();
            foreach ($this->autoridades as $value) {
                $autoridades[] = SecurityEncryptionHelper::decrypt($value);
            }
            return $autoridades;
        } else {
            return $this->autoridades;
        }
    }

    public function setAutoridades($autoridades) {

        if (isset($autoridades[0])) {
            foreach ($autoridades as $key => $value) {
                $autoridades[$key] = SecurityEncryptionHelper::encrypt($value);
            }
        }

        $this->autoridades = $autoridades;
    }

    public function setAllow(Funcionalidade &$objFuncionalidade) {

        switch ($objFuncionalidade->getTipo()) {

            case 'TB':

                # Partir no underline
                $pUnderline = explode('_', $objFuncionalidade->getNome());
                $modulo = ucfirst($pUnderline[0]);

                # Partir no jogo da velha
                $pVelha = explode('#', $pUnderline[1]);

                # Definir pagina e toolbar
                $pagina = $pVelha[0];
                $toolbar = $pVelha[1];

                # Setar toolbar
                $this->toolbarAllow[$modulo][$pagina][$toolbar] = $objFuncionalidade->getId();

                # Limpar memoria
                unset($pVelha);
                unset($pUnderline);
                unset($modulo);
                unset($pagina);
                unset($toolbar);

                break;

            case 'FG':

                # Partir no underline
                $pUnderline = explode('_', $objFuncionalidade->getNome());
                $modulo = ucfirst($pUnderline[0]);

                # Partir no jogo da velha
                $pVelha = explode('@', $pUnderline[1]);

                # Definir pagina e flag
                $pagina = $pVelha[0];
                $flag = $pVelha[1];

                # Setar toolbar
                $this->toolbarAllow[$modulo][$pagina][$flag] = $objFuncionalidade->getId();

                # Limpar memoria
                unset($pVelha);
                unset($pUnderline);
                unset($modulo);
                unset($pagina);
                unset($flag);

                break;

            default:

                # Partir no underline
                $pUnderline = explode('_', $objFuncionalidade->getNome());
                $modulo = ucfirst($pUnderline[0]);
                $pagina = $pUnderline[1];

                # Setar toolbar
                $this->pageAllow[$modulo][$pagina] = $objFuncionalidade->getId();

                # Limpar memoria
                unset($pUnderline);
                unset($modulo);
                unset($pagina);

                break;
        }
    }

    public function isModuleAllow() {
        return (!isset($this->pageAllow[ucfirst(CurrentSystemHelper::getCurrentController())])) ? false : true;
    }

    public function isPageAllow($modulo, $pagina) {
        return (!isset($this->pageAllow[ucfirst($modulo)][$pagina])) ? false : true;
    }

    public function isToolbarAllow($toolbar) {
        return (!isset($this->toolbarAllow[ucfirst(CurrentSystemHelper::getCurrentController())][CurrentSystemHelper::getCurrentAction()][$toolbar])) ? false : true;
    }

    public function isFlagAllow($modulo, $pagina, $flag) {
        return (!isset($this->flagAllow[ucfirst($modulo)][$pagina][$flag])) ? false : true;
    }

    public function getToolbar() {
        return $this->toolbarAllow;
    }

    public function getPage() {
        return $this->pageAllow;
    }

}

?>